package com.applesweet.team.pojo;

import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

public class SubjectExample {
    protected String orderByClause;

    protected boolean distinct;

    protected List<Criteria> oredCriteria;

    public SubjectExample() {
        oredCriteria = new ArrayList<Criteria>();
    }

    public void setOrderByClause(String orderByClause) {
        this.orderByClause = orderByClause;
    }

    public String getOrderByClause() {
        return orderByClause;
    }

    public void setDistinct(boolean distinct) {
        this.distinct = distinct;
    }

    public boolean isDistinct() {
        return distinct;
    }

    public List<Criteria> getOredCriteria() {
        return oredCriteria;
    }

    public void or(Criteria criteria) {
        oredCriteria.add(criteria);
    }

    public Criteria or() {
        Criteria criteria = createCriteriaInternal();
        oredCriteria.add(criteria);
        return criteria;
    }

    public Criteria createCriteria() {
        Criteria criteria = createCriteriaInternal();
        if (oredCriteria.size() == 0) {
            oredCriteria.add(criteria);
        }
        return criteria;
    }

    protected Criteria createCriteriaInternal() {
        Criteria criteria = new Criteria();
        return criteria;
    }

    public void clear() {
        oredCriteria.clear();
        orderByClause = null;
        distinct = false;
    }

    protected abstract static class GeneratedCriteria {
        protected List<Criterion> criteria;

        protected GeneratedCriteria() {
            super();
            criteria = new ArrayList<Criterion>();
        }

        public boolean isValid() {
            return criteria.size() > 0;
        }

        public List<Criterion> getAllCriteria() {
            return criteria;
        }

        public List<Criterion> getCriteria() {
            return criteria;
        }

        protected void addCriterion(String condition) {
            if (condition == null) {
                throw new RuntimeException("Value for condition cannot be null");
            }
            criteria.add(new Criterion(condition));
        }

        protected void addCriterion(String condition, Object value, String property) {
            if (value == null) {
                throw new RuntimeException("Value for " + property + " cannot be null");
            }
            criteria.add(new Criterion(condition, value));
        }

        protected void addCriterion(String condition, Object value1, Object value2, String property) {
            if (value1 == null || value2 == null) {
                throw new RuntimeException("Between values for " + property + " cannot be null");
            }
            criteria.add(new Criterion(condition, value1, value2));
        }

        protected void addCriterionForJDBCDate(String condition, Date value, String property) {
            if (value == null) {
                throw new RuntimeException("Value for " + property + " cannot be null");
            }
            addCriterion(condition, new java.sql.Date(value.getTime()), property);
        }

        protected void addCriterionForJDBCDate(String condition, List<Date> values, String property) {
            if (values == null || values.size() == 0) {
                throw new RuntimeException("Value list for " + property + " cannot be null or empty");
            }
            List<java.sql.Date> dateList = new ArrayList<java.sql.Date>();
            Iterator<Date> iter = values.iterator();
            while (iter.hasNext()) {
                dateList.add(new java.sql.Date(iter.next().getTime()));
            }
            addCriterion(condition, dateList, property);
        }

        protected void addCriterionForJDBCDate(String condition, Date value1, Date value2, String property) {
            if (value1 == null || value2 == null) {
                throw new RuntimeException("Between values for " + property + " cannot be null");
            }
            addCriterion(condition, new java.sql.Date(value1.getTime()), new java.sql.Date(value2.getTime()), property);
        }

        public Criteria andSubjectIdIsNull() {
            addCriterion("subject_id is null");
            return (Criteria) this;
        }

        public Criteria andSubjectIdIsNotNull() {
            addCriterion("subject_id is not null");
            return (Criteria) this;
        }

        public Criteria andSubjectIdEqualTo(Integer value) {
            addCriterion("subject_id =", value, "subjectId");
            return (Criteria) this;
        }

        public Criteria andSubjectIdNotEqualTo(Integer value) {
            addCriterion("subject_id <>", value, "subjectId");
            return (Criteria) this;
        }

        public Criteria andSubjectIdGreaterThan(Integer value) {
            addCriterion("subject_id >", value, "subjectId");
            return (Criteria) this;
        }

        public Criteria andSubjectIdGreaterThanOrEqualTo(Integer value) {
            addCriterion("subject_id >=", value, "subjectId");
            return (Criteria) this;
        }

        public Criteria andSubjectIdLessThan(Integer value) {
            addCriterion("subject_id <", value, "subjectId");
            return (Criteria) this;
        }

        public Criteria andSubjectIdLessThanOrEqualTo(Integer value) {
            addCriterion("subject_id <=", value, "subjectId");
            return (Criteria) this;
        }

        public Criteria andSubjectIdIn(List<Integer> values) {
            addCriterion("subject_id in", values, "subjectId");
            return (Criteria) this;
        }

        public Criteria andSubjectIdNotIn(List<Integer> values) {
            addCriterion("subject_id not in", values, "subjectId");
            return (Criteria) this;
        }

        public Criteria andSubjectIdBetween(Integer value1, Integer value2) {
            addCriterion("subject_id between", value1, value2, "subjectId");
            return (Criteria) this;
        }

        public Criteria andSubjectIdNotBetween(Integer value1, Integer value2) {
            addCriterion("subject_id not between", value1, value2, "subjectId");
            return (Criteria) this;
        }

        public Criteria andSubjectQuestionIsNull() {
            addCriterion("subject_question is null");
            return (Criteria) this;
        }

        public Criteria andSubjectQuestionIsNotNull() {
            addCriterion("subject_question is not null");
            return (Criteria) this;
        }

        public Criteria andSubjectQuestionEqualTo(String value) {
            addCriterion("subject_question =", value, "subjectQuestion");
            return (Criteria) this;
        }

        public Criteria andSubjectQuestionNotEqualTo(String value) {
            addCriterion("subject_question <>", value, "subjectQuestion");
            return (Criteria) this;
        }

        public Criteria andSubjectQuestionGreaterThan(String value) {
            addCriterion("subject_question >", value, "subjectQuestion");
            return (Criteria) this;
        }

        public Criteria andSubjectQuestionGreaterThanOrEqualTo(String value) {
            addCriterion("subject_question >=", value, "subjectQuestion");
            return (Criteria) this;
        }

        public Criteria andSubjectQuestionLessThan(String value) {
            addCriterion("subject_question <", value, "subjectQuestion");
            return (Criteria) this;
        }

        public Criteria andSubjectQuestionLessThanOrEqualTo(String value) {
            addCriterion("subject_question <=", value, "subjectQuestion");
            return (Criteria) this;
        }

        public Criteria andSubjectQuestionLike(String value) {
            addCriterion("subject_question like", value, "subjectQuestion");
            return (Criteria) this;
        }

        public Criteria andSubjectQuestionNotLike(String value) {
            addCriterion("subject_question not like", value, "subjectQuestion");
            return (Criteria) this;
        }

        public Criteria andSubjectQuestionIn(List<String> values) {
            addCriterion("subject_question in", values, "subjectQuestion");
            return (Criteria) this;
        }

        public Criteria andSubjectQuestionNotIn(List<String> values) {
            addCriterion("subject_question not in", values, "subjectQuestion");
            return (Criteria) this;
        }

        public Criteria andSubjectQuestionBetween(String value1, String value2) {
            addCriterion("subject_question between", value1, value2, "subjectQuestion");
            return (Criteria) this;
        }

        public Criteria andSubjectQuestionNotBetween(String value1, String value2) {
            addCriterion("subject_question not between", value1, value2, "subjectQuestion");
            return (Criteria) this;
        }

        public Criteria andSubjectAnswerIsNull() {
            addCriterion("subject_answer is null");
            return (Criteria) this;
        }

        public Criteria andSubjectAnswerIsNotNull() {
            addCriterion("subject_answer is not null");
            return (Criteria) this;
        }

        public Criteria andSubjectAnswerEqualTo(String value) {
            addCriterion("subject_answer =", value, "subjectAnswer");
            return (Criteria) this;
        }

        public Criteria andSubjectAnswerNotEqualTo(String value) {
            addCriterion("subject_answer <>", value, "subjectAnswer");
            return (Criteria) this;
        }

        public Criteria andSubjectAnswerGreaterThan(String value) {
            addCriterion("subject_answer >", value, "subjectAnswer");
            return (Criteria) this;
        }

        public Criteria andSubjectAnswerGreaterThanOrEqualTo(String value) {
            addCriterion("subject_answer >=", value, "subjectAnswer");
            return (Criteria) this;
        }

        public Criteria andSubjectAnswerLessThan(String value) {
            addCriterion("subject_answer <", value, "subjectAnswer");
            return (Criteria) this;
        }

        public Criteria andSubjectAnswerLessThanOrEqualTo(String value) {
            addCriterion("subject_answer <=", value, "subjectAnswer");
            return (Criteria) this;
        }

        public Criteria andSubjectAnswerLike(String value) {
            addCriterion("subject_answer like", value, "subjectAnswer");
            return (Criteria) this;
        }

        public Criteria andSubjectAnswerNotLike(String value) {
            addCriterion("subject_answer not like", value, "subjectAnswer");
            return (Criteria) this;
        }

        public Criteria andSubjectAnswerIn(List<String> values) {
            addCriterion("subject_answer in", values, "subjectAnswer");
            return (Criteria) this;
        }

        public Criteria andSubjectAnswerNotIn(List<String> values) {
            addCriterion("subject_answer not in", values, "subjectAnswer");
            return (Criteria) this;
        }

        public Criteria andSubjectAnswerBetween(String value1, String value2) {
            addCriterion("subject_answer between", value1, value2, "subjectAnswer");
            return (Criteria) this;
        }

        public Criteria andSubjectAnswerNotBetween(String value1, String value2) {
            addCriterion("subject_answer not between", value1, value2, "subjectAnswer");
            return (Criteria) this;
        }

        public Criteria andConsumerIdIsNull() {
            addCriterion("consumer_id is null");
            return (Criteria) this;
        }

        public Criteria andConsumerIdIsNotNull() {
            addCriterion("consumer_id is not null");
            return (Criteria) this;
        }

        public Criteria andConsumerIdEqualTo(Integer value) {
            addCriterion("consumer_id =", value, "consumerId");
            return (Criteria) this;
        }

        public Criteria andConsumerIdNotEqualTo(Integer value) {
            addCriterion("consumer_id <>", value, "consumerId");
            return (Criteria) this;
        }

        public Criteria andConsumerIdGreaterThan(Integer value) {
            addCriterion("consumer_id >", value, "consumerId");
            return (Criteria) this;
        }

        public Criteria andConsumerIdGreaterThanOrEqualTo(Integer value) {
            addCriterion("consumer_id >=", value, "consumerId");
            return (Criteria) this;
        }

        public Criteria andConsumerIdLessThan(Integer value) {
            addCriterion("consumer_id <", value, "consumerId");
            return (Criteria) this;
        }

        public Criteria andConsumerIdLessThanOrEqualTo(Integer value) {
            addCriterion("consumer_id <=", value, "consumerId");
            return (Criteria) this;
        }

        public Criteria andConsumerIdIn(List<Integer> values) {
            addCriterion("consumer_id in", values, "consumerId");
            return (Criteria) this;
        }

        public Criteria andConsumerIdNotIn(List<Integer> values) {
            addCriterion("consumer_id not in", values, "consumerId");
            return (Criteria) this;
        }

        public Criteria andConsumerIdBetween(Integer value1, Integer value2) {
            addCriterion("consumer_id between", value1, value2, "consumerId");
            return (Criteria) this;
        }

        public Criteria andConsumerIdNotBetween(Integer value1, Integer value2) {
            addCriterion("consumer_id not between", value1, value2, "consumerId");
            return (Criteria) this;
        }

        public Criteria andSubjectStateIsNull() {
            addCriterion("subject_state is null");
            return (Criteria) this;
        }

        public Criteria andSubjectStateIsNotNull() {
            addCriterion("subject_state is not null");
            return (Criteria) this;
        }

        public Criteria andSubjectStateEqualTo(Integer value) {
            addCriterion("subject_state =", value, "subjectState");
            return (Criteria) this;
        }

        public Criteria andSubjectStateNotEqualTo(Integer value) {
            addCriterion("subject_state <>", value, "subjectState");
            return (Criteria) this;
        }

        public Criteria andSubjectStateGreaterThan(Integer value) {
            addCriterion("subject_state >", value, "subjectState");
            return (Criteria) this;
        }

        public Criteria andSubjectStateGreaterThanOrEqualTo(Integer value) {
            addCriterion("subject_state >=", value, "subjectState");
            return (Criteria) this;
        }

        public Criteria andSubjectStateLessThan(Integer value) {
            addCriterion("subject_state <", value, "subjectState");
            return (Criteria) this;
        }

        public Criteria andSubjectStateLessThanOrEqualTo(Integer value) {
            addCriterion("subject_state <=", value, "subjectState");
            return (Criteria) this;
        }

        public Criteria andSubjectStateIn(List<Integer> values) {
            addCriterion("subject_state in", values, "subjectState");
            return (Criteria) this;
        }

        public Criteria andSubjectStateNotIn(List<Integer> values) {
            addCriterion("subject_state not in", values, "subjectState");
            return (Criteria) this;
        }

        public Criteria andSubjectStateBetween(Integer value1, Integer value2) {
            addCriterion("subject_state between", value1, value2, "subjectState");
            return (Criteria) this;
        }

        public Criteria andSubjectStateNotBetween(Integer value1, Integer value2) {
            addCriterion("subject_state not between", value1, value2, "subjectState");
            return (Criteria) this;
        }

        public Criteria andSubjectQuestionTypeIsNull() {
            addCriterion("subject_question_type is null");
            return (Criteria) this;
        }

        public Criteria andSubjectQuestionTypeIsNotNull() {
            addCriterion("subject_question_type is not null");
            return (Criteria) this;
        }

        public Criteria andSubjectQuestionTypeEqualTo(Integer value) {
            addCriterion("subject_question_type =", value, "subjectQuestionType");
            return (Criteria) this;
        }

        public Criteria andSubjectQuestionTypeNotEqualTo(Integer value) {
            addCriterion("subject_question_type <>", value, "subjectQuestionType");
            return (Criteria) this;
        }

        public Criteria andSubjectQuestionTypeGreaterThan(Integer value) {
            addCriterion("subject_question_type >", value, "subjectQuestionType");
            return (Criteria) this;
        }

        public Criteria andSubjectQuestionTypeGreaterThanOrEqualTo(Integer value) {
            addCriterion("subject_question_type >=", value, "subjectQuestionType");
            return (Criteria) this;
        }

        public Criteria andSubjectQuestionTypeLessThan(Integer value) {
            addCriterion("subject_question_type <", value, "subjectQuestionType");
            return (Criteria) this;
        }

        public Criteria andSubjectQuestionTypeLessThanOrEqualTo(Integer value) {
            addCriterion("subject_question_type <=", value, "subjectQuestionType");
            return (Criteria) this;
        }

        public Criteria andSubjectQuestionTypeIn(List<Integer> values) {
            addCriterion("subject_question_type in", values, "subjectQuestionType");
            return (Criteria) this;
        }

        public Criteria andSubjectQuestionTypeNotIn(List<Integer> values) {
            addCriterion("subject_question_type not in", values, "subjectQuestionType");
            return (Criteria) this;
        }

        public Criteria andSubjectQuestionTypeBetween(Integer value1, Integer value2) {
            addCriterion("subject_question_type between", value1, value2, "subjectQuestionType");
            return (Criteria) this;
        }

        public Criteria andSubjectQuestionTypeNotBetween(Integer value1, Integer value2) {
            addCriterion("subject_question_type not between", value1, value2, "subjectQuestionType");
            return (Criteria) this;
        }

        public Criteria andSubjectDifficultyIsNull() {
            addCriterion("subject_difficulty is null");
            return (Criteria) this;
        }

        public Criteria andSubjectDifficultyIsNotNull() {
            addCriterion("subject_difficulty is not null");
            return (Criteria) this;
        }

        public Criteria andSubjectDifficultyEqualTo(Integer value) {
            addCriterion("subject_difficulty =", value, "subjectDifficulty");
            return (Criteria) this;
        }

        public Criteria andSubjectDifficultyNotEqualTo(Integer value) {
            addCriterion("subject_difficulty <>", value, "subjectDifficulty");
            return (Criteria) this;
        }

        public Criteria andSubjectDifficultyGreaterThan(Integer value) {
            addCriterion("subject_difficulty >", value, "subjectDifficulty");
            return (Criteria) this;
        }

        public Criteria andSubjectDifficultyGreaterThanOrEqualTo(Integer value) {
            addCriterion("subject_difficulty >=", value, "subjectDifficulty");
            return (Criteria) this;
        }

        public Criteria andSubjectDifficultyLessThan(Integer value) {
            addCriterion("subject_difficulty <", value, "subjectDifficulty");
            return (Criteria) this;
        }

        public Criteria andSubjectDifficultyLessThanOrEqualTo(Integer value) {
            addCriterion("subject_difficulty <=", value, "subjectDifficulty");
            return (Criteria) this;
        }

        public Criteria andSubjectDifficultyIn(List<Integer> values) {
            addCriterion("subject_difficulty in", values, "subjectDifficulty");
            return (Criteria) this;
        }

        public Criteria andSubjectDifficultyNotIn(List<Integer> values) {
            addCriterion("subject_difficulty not in", values, "subjectDifficulty");
            return (Criteria) this;
        }

        public Criteria andSubjectDifficultyBetween(Integer value1, Integer value2) {
            addCriterion("subject_difficulty between", value1, value2, "subjectDifficulty");
            return (Criteria) this;
        }

        public Criteria andSubjectDifficultyNotBetween(Integer value1, Integer value2) {
            addCriterion("subject_difficulty not between", value1, value2, "subjectDifficulty");
            return (Criteria) this;
        }

        public Criteria andSubjectTypenameIsNull() {
            addCriterion("subject_typename is null");
            return (Criteria) this;
        }

        public Criteria andSubjectTypenameIsNotNull() {
            addCriterion("subject_typename is not null");
            return (Criteria) this;
        }

        public Criteria andSubjectTypenameEqualTo(String value) {
            addCriterion("subject_typename =", value, "subjectTypename");
            return (Criteria) this;
        }

        public Criteria andSubjectTypenameNotEqualTo(String value) {
            addCriterion("subject_typename <>", value, "subjectTypename");
            return (Criteria) this;
        }

        public Criteria andSubjectTypenameGreaterThan(String value) {
            addCriterion("subject_typename >", value, "subjectTypename");
            return (Criteria) this;
        }

        public Criteria andSubjectTypenameGreaterThanOrEqualTo(String value) {
            addCriterion("subject_typename >=", value, "subjectTypename");
            return (Criteria) this;
        }

        public Criteria andSubjectTypenameLessThan(String value) {
            addCriterion("subject_typename <", value, "subjectTypename");
            return (Criteria) this;
        }

        public Criteria andSubjectTypenameLessThanOrEqualTo(String value) {
            addCriterion("subject_typename <=", value, "subjectTypename");
            return (Criteria) this;
        }

        public Criteria andSubjectTypenameLike(String value) {
            addCriterion("subject_typename like", value, "subjectTypename");
            return (Criteria) this;
        }

        public Criteria andSubjectTypenameNotLike(String value) {
            addCriterion("subject_typename not like", value, "subjectTypename");
            return (Criteria) this;
        }

        public Criteria andSubjectTypenameIn(List<String> values) {
            addCriterion("subject_typename in", values, "subjectTypename");
            return (Criteria) this;
        }

        public Criteria andSubjectTypenameNotIn(List<String> values) {
            addCriterion("subject_typename not in", values, "subjectTypename");
            return (Criteria) this;
        }

        public Criteria andSubjectTypenameBetween(String value1, String value2) {
            addCriterion("subject_typename between", value1, value2, "subjectTypename");
            return (Criteria) this;
        }

        public Criteria andSubjectTypenameNotBetween(String value1, String value2) {
            addCriterion("subject_typename not between", value1, value2, "subjectTypename");
            return (Criteria) this;
        }

        public Criteria andSubjectRemarksIsNull() {
            addCriterion("subject_remarks is null");
            return (Criteria) this;
        }

        public Criteria andSubjectRemarksIsNotNull() {
            addCriterion("subject_remarks is not null");
            return (Criteria) this;
        }

        public Criteria andSubjectRemarksEqualTo(String value) {
            addCriterion("subject_remarks =", value, "subjectRemarks");
            return (Criteria) this;
        }

        public Criteria andSubjectRemarksNotEqualTo(String value) {
            addCriterion("subject_remarks <>", value, "subjectRemarks");
            return (Criteria) this;
        }

        public Criteria andSubjectRemarksGreaterThan(String value) {
            addCriterion("subject_remarks >", value, "subjectRemarks");
            return (Criteria) this;
        }

        public Criteria andSubjectRemarksGreaterThanOrEqualTo(String value) {
            addCriterion("subject_remarks >=", value, "subjectRemarks");
            return (Criteria) this;
        }

        public Criteria andSubjectRemarksLessThan(String value) {
            addCriterion("subject_remarks <", value, "subjectRemarks");
            return (Criteria) this;
        }

        public Criteria andSubjectRemarksLessThanOrEqualTo(String value) {
            addCriterion("subject_remarks <=", value, "subjectRemarks");
            return (Criteria) this;
        }

        public Criteria andSubjectRemarksLike(String value) {
            addCriterion("subject_remarks like", value, "subjectRemarks");
            return (Criteria) this;
        }

        public Criteria andSubjectRemarksNotLike(String value) {
            addCriterion("subject_remarks not like", value, "subjectRemarks");
            return (Criteria) this;
        }

        public Criteria andSubjectRemarksIn(List<String> values) {
            addCriterion("subject_remarks in", values, "subjectRemarks");
            return (Criteria) this;
        }

        public Criteria andSubjectRemarksNotIn(List<String> values) {
            addCriterion("subject_remarks not in", values, "subjectRemarks");
            return (Criteria) this;
        }

        public Criteria andSubjectRemarksBetween(String value1, String value2) {
            addCriterion("subject_remarks between", value1, value2, "subjectRemarks");
            return (Criteria) this;
        }

        public Criteria andSubjectRemarksNotBetween(String value1, String value2) {
            addCriterion("subject_remarks not between", value1, value2, "subjectRemarks");
            return (Criteria) this;
        }

        public Criteria andSubjectNumberIsNull() {
            addCriterion("subject_number is null");
            return (Criteria) this;
        }

        public Criteria andSubjectNumberIsNotNull() {
            addCriterion("subject_number is not null");
            return (Criteria) this;
        }

        public Criteria andSubjectNumberEqualTo(Integer value) {
            addCriterion("subject_number =", value, "subjectNumber");
            return (Criteria) this;
        }

        public Criteria andSubjectNumberNotEqualTo(Integer value) {
            addCriterion("subject_number <>", value, "subjectNumber");
            return (Criteria) this;
        }

        public Criteria andSubjectNumberGreaterThan(Integer value) {
            addCriterion("subject_number >", value, "subjectNumber");
            return (Criteria) this;
        }

        public Criteria andSubjectNumberGreaterThanOrEqualTo(Integer value) {
            addCriterion("subject_number >=", value, "subjectNumber");
            return (Criteria) this;
        }

        public Criteria andSubjectNumberLessThan(Integer value) {
            addCriterion("subject_number <", value, "subjectNumber");
            return (Criteria) this;
        }

        public Criteria andSubjectNumberLessThanOrEqualTo(Integer value) {
            addCriterion("subject_number <=", value, "subjectNumber");
            return (Criteria) this;
        }

        public Criteria andSubjectNumberIn(List<Integer> values) {
            addCriterion("subject_number in", values, "subjectNumber");
            return (Criteria) this;
        }

        public Criteria andSubjectNumberNotIn(List<Integer> values) {
            addCriterion("subject_number not in", values, "subjectNumber");
            return (Criteria) this;
        }

        public Criteria andSubjectNumberBetween(Integer value1, Integer value2) {
            addCriterion("subject_number between", value1, value2, "subjectNumber");
            return (Criteria) this;
        }

        public Criteria andSubjectNumberNotBetween(Integer value1, Integer value2) {
            addCriterion("subject_number not between", value1, value2, "subjectNumber");
            return (Criteria) this;
        }

        public Criteria andSubjectDateIsNull() {
            addCriterion("subject_date is null");
            return (Criteria) this;
        }

        public Criteria andSubjectDateIsNotNull() {
            addCriterion("subject_date is not null");
            return (Criteria) this;
        }

        public Criteria andSubjectDateEqualTo(Date value) {
            addCriterionForJDBCDate("subject_date =", value, "subjectDate");
            return (Criteria) this;
        }

        public Criteria andSubjectDateNotEqualTo(Date value) {
            addCriterionForJDBCDate("subject_date <>", value, "subjectDate");
            return (Criteria) this;
        }

        public Criteria andSubjectDateGreaterThan(Date value) {
            addCriterionForJDBCDate("subject_date >", value, "subjectDate");
            return (Criteria) this;
        }

        public Criteria andSubjectDateGreaterThanOrEqualTo(Date value) {
            addCriterionForJDBCDate("subject_date >=", value, "subjectDate");
            return (Criteria) this;
        }

        public Criteria andSubjectDateLessThan(Date value) {
            addCriterionForJDBCDate("subject_date <", value, "subjectDate");
            return (Criteria) this;
        }

        public Criteria andSubjectDateLessThanOrEqualTo(Date value) {
            addCriterionForJDBCDate("subject_date <=", value, "subjectDate");
            return (Criteria) this;
        }

        public Criteria andSubjectDateIn(List<Date> values) {
            addCriterionForJDBCDate("subject_date in", values, "subjectDate");
            return (Criteria) this;
        }

        public Criteria andSubjectDateNotIn(List<Date> values) {
            addCriterionForJDBCDate("subject_date not in", values, "subjectDate");
            return (Criteria) this;
        }

        public Criteria andSubjectDateBetween(Date value1, Date value2) {
            addCriterionForJDBCDate("subject_date between", value1, value2, "subjectDate");
            return (Criteria) this;
        }

        public Criteria andSubjectDateNotBetween(Date value1, Date value2) {
            addCriterionForJDBCDate("subject_date not between", value1, value2, "subjectDate");
            return (Criteria) this;
        }

        public Criteria andSubjectTypeCollectionIsNull() {
            addCriterion("subject_type_collection is null");
            return (Criteria) this;
        }

        public Criteria andSubjectTypeCollectionIsNotNull() {
            addCriterion("subject_type_collection is not null");
            return (Criteria) this;
        }

        public Criteria andSubjectTypeCollectionEqualTo(String value) {
            addCriterion("subject_type_collection =", value, "subjectTypeCollection");
            return (Criteria) this;
        }

        public Criteria andSubjectTypeCollectionNotEqualTo(String value) {
            addCriterion("subject_type_collection <>", value, "subjectTypeCollection");
            return (Criteria) this;
        }

        public Criteria andSubjectTypeCollectionGreaterThan(String value) {
            addCriterion("subject_type_collection >", value, "subjectTypeCollection");
            return (Criteria) this;
        }

        public Criteria andSubjectTypeCollectionGreaterThanOrEqualTo(String value) {
            addCriterion("subject_type_collection >=", value, "subjectTypeCollection");
            return (Criteria) this;
        }

        public Criteria andSubjectTypeCollectionLessThan(String value) {
            addCriterion("subject_type_collection <", value, "subjectTypeCollection");
            return (Criteria) this;
        }

        public Criteria andSubjectTypeCollectionLessThanOrEqualTo(String value) {
            addCriterion("subject_type_collection <=", value, "subjectTypeCollection");
            return (Criteria) this;
        }

        public Criteria andSubjectTypeCollectionLike(String value) {
            addCriterion("subject_type_collection like", value, "subjectTypeCollection");
            return (Criteria) this;
        }

        public Criteria andSubjectTypeCollectionNotLike(String value) {
            addCriterion("subject_type_collection not like", value, "subjectTypeCollection");
            return (Criteria) this;
        }

        public Criteria andSubjectTypeCollectionIn(List<String> values) {
            addCriterion("subject_type_collection in", values, "subjectTypeCollection");
            return (Criteria) this;
        }

        public Criteria andSubjectTypeCollectionNotIn(List<String> values) {
            addCriterion("subject_type_collection not in", values, "subjectTypeCollection");
            return (Criteria) this;
        }

        public Criteria andSubjectTypeCollectionBetween(String value1, String value2) {
            addCriterion("subject_type_collection between", value1, value2, "subjectTypeCollection");
            return (Criteria) this;
        }

        public Criteria andSubjectTypeCollectionNotBetween(String value1, String value2) {
            addCriterion("subject_type_collection not between", value1, value2, "subjectTypeCollection");
            return (Criteria) this;
        }
    }

    public static class Criteria extends GeneratedCriteria {

        protected Criteria() {
            super();
        }
    }

    public static class Criterion {
        private String condition;

        private Object value;

        private Object secondValue;

        private boolean noValue;

        private boolean singleValue;

        private boolean betweenValue;

        private boolean listValue;

        private String typeHandler;

        public String getCondition() {
            return condition;
        }

        public Object getValue() {
            return value;
        }

        public Object getSecondValue() {
            return secondValue;
        }

        public boolean isNoValue() {
            return noValue;
        }

        public boolean isSingleValue() {
            return singleValue;
        }

        public boolean isBetweenValue() {
            return betweenValue;
        }

        public boolean isListValue() {
            return listValue;
        }

        public String getTypeHandler() {
            return typeHandler;
        }

        protected Criterion(String condition) {
            super();
            this.condition = condition;
            this.typeHandler = null;
            this.noValue = true;
        }

        protected Criterion(String condition, Object value, String typeHandler) {
            super();
            this.condition = condition;
            this.value = value;
            this.typeHandler = typeHandler;
            if (value instanceof List<?>) {
                this.listValue = true;
            } else {
                this.singleValue = true;
            }
        }

        protected Criterion(String condition, Object value) {
            this(condition, value, null);
        }

        protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {
            super();
            this.condition = condition;
            this.value = value;
            this.secondValue = secondValue;
            this.typeHandler = typeHandler;
            this.betweenValue = true;
        }

        protected Criterion(String condition, Object value, Object secondValue) {
            this(condition, value, secondValue, null);
        }
    }
}